package com.puruo.mindhall.utils;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

import java.io.IOException;

/**
 * <pre>
 * <b>JsonConfig</b>
 * <b>Description:
 *         通过该方法对mapper对象进行设置，所有序列化的对象都将按改规则进行系列化
 *        Include.Include.ALWAYS 默认
 *        Include.NON_DEFAULT 属性为默认值不序列化
 *        Include.NON_EMPTY 属性为 空（""） 或者为 NULL 都不序列化，则返回的json是没有这个字段的。这样对移动端会更省流量
 *        Include.NON_NULL 属性为NULL 不序列化,就是为null的字段不参加序列化
 *        字段保留，将null值转为""
 *        </b>
 * <b>@author:wangyong2@360humi.com</b>
 * <b>Date:</b> 2021/12/24 16:33
 * <b>Copyright:</b> Copyright 2017-2019 www.360humi.com Technology Co., Ltd. All rights reserved.
 * <b>Changelog:</b>
 *   Ver          Date                    Author                  Detail
 *   ----------------------------------------------------------------------
 *   1.0   2021/12/24 16:33    wangyong2@360humi.com     new file.
 * </pre>
 */
@Configuration
public class JsonConfig {
	@Bean
	@Primary
	@ConditionalOnMissingBean(ObjectMapper.class)
	public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder)
	{
		ObjectMapper objectMapper = builder.createXmlMapper(false).build();
		objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>()
		{
			@Override
			public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
				jsonGenerator.writeString("");
			}
		});
		return objectMapper;
	}
}
